জাভাস্ক্রিপ্টে ইটারেবল একটি অবজেক্টের গুণ যা এটিকে পুনরাবৃত্তি (iteration) করা সম্ভব করে তোলে। সাধারণত, ইটারেবল অবজেক্টগুলো তাদের উপাদানগুলি একটি নির্দিষ্ট ক্রমে একে একে এক্সেস করার জন্য ব্যবহৃত হয়। একটি অবজেক্ট যদি ইটারেবল হয়, তাহলে সেটি for...of লুপ অথবা অন্যান্য ইটারেটর মেথডের সাহায্যে পুনরাবৃত্তি করা যেতে পারে।
প্রথাগতভাবে, জাভাস্ক্রিপ্টের অবজেক্টগুলি ইটারেবল নয়, অর্থাৎ সরাসরি তাদের উপর for...of লুপ ব্যবহার করা যায় না। তবে, Object.entries(), Object.keys(), এবং Object.values() ইত্যাদি মেথড ব্যবহার করে অবজেক্টের উপাদানগুলোকে ইটারেবল বানানো যায়।
অবজেক্ট ইটারেবল কিভাবে কাজ করে?
জাভাস্ক্রিপ্টে ইটারেবল হতে গেলে একটি অবজেক্টের কাছে Symbol.iterator মেথড থাকতে হবে, যা তার উপাদানগুলো পুনরাবৃত্তি করার জন্য ইটারেটর প্রদান করে।
ইটারেবল অবজেক্টের উদাহরণ
যদিও জাভাস্ক্রিপ্টের সাধারণ অবজেক্ট ইটারেবল নয়, তবে Object.entries(), Object.keys(), এবং Object.values() মেথডের মাধ্যমে একটি অবজেক্টকে ইটারেবল তৈরি করা সম্ভব।
উদাহরণ ১: Object.entries() দিয়ে অবজেক্ট ইটারেবল করা
Object.entries() একটি অবজেক্টের কীগুলো এবং মানগুলোর (key-value pairs) একটি অ্যারে রিটার্ন করে, যা ইটারেবল।
const person = {
name: "Alice",
age: 25,
city: "New York"
};
for (let [key, value] of Object.entries(person)) {
console.log(`${key}: ${value}`);
}
আউটপুট:
name: Alice
age: 25
city: New York
এখানে, Object.entries(person) person অবজেক্টের কীগুলোর সাথে সম্পর্কিত মানগুলি একটি অ্যারে হিসেবে রিটার্ন করে। এই অ্যারে ইটারেবল, তাই এটি for...of লুপ দিয়ে পুনরাবৃত্তি করা যায়।
উদাহরণ ২: Object.keys() দিয়ে অবজেক্ট ইটারেবল করা
Object.keys() শুধুমাত্র অবজেক্টের কীগুলো রিটার্ন করে এবং এটি একটি ইটারেবল অ্যারে প্রদান করে।
const person = {
name: "Bob",
age: 30,
city: "Los Angeles"
};
for (let key of Object.keys(person)) {
console.log(key);
}
আউটপুট:
name
age
city
এখানে, Object.keys(person) কেবল অবজেক্টের কীগুলো প্রদান করে এবং সেগুলোর উপর for...of লুপ ব্যবহার করা হয়।
উদাহরণ ৩: Object.values() দিয়ে অবজেক্ট ইটারেবল করা
Object.values() একটি অবজেক্টের মানগুলোর একটি অ্যারে রিটার্ন করে, যা ইটারেবল।
const person = {
name: "Charlie",
age: 35,
city: "Chicago"
};
for (let value of Object.values(person)) {
console.log(value);
}
আউটপুট:
Charlie
35
Chicago
এখানে, Object.values(person) অবজেক্টের সব মানগুলো রিটার্ন করে এবং এগুলোর উপর for...of লুপ প্রয়োগ করা হয়।
ইটারেবল অবজেক্ট তৈরি করা
যদি আপনি নিজে একটি ইটারেবল অবজেক্ট তৈরি করতে চান, তবে আপনাকে সেই অবজেক্টে Symbol.iterator মেথড অন্তর্ভুক্ত করতে হবে, যা ইটারেটর রিটার্ন করবে। নিচে এর একটি উদাহরণ দেওয়া হল:
const person = {
name: "David",
age: 40,
city: "Miami",
[Symbol.iterator]: function() {
const entries = Object.entries(this);
let index = 0;
return {
next: () => {
if (index < entries.length) {
return { value: entries[index++], done: false };
} else {
return { done: true };
}
}
};
}
};
for (let [key, value] of person) {
console.log(`${key}: ${value}`);
}
আউটপুট:
name: David
age: 40
city: Miami
এখানে, person অবজেক্টের মধ্যে একটি Symbol.iterator মেথড সংজ্ঞায়িত করা হয়েছে, যা Object.entries() থেকে কীগুলো এবং মানগুলোর তালিকা তৈরি করে এবং তার পরবর্তী উপাদানটি ফেরত দেয়। এর ফলে, এই অবজেক্টটি for...of লুপের মাধ্যমে ইটারেবল হয়ে ওঠে।
ইটারেবল এবং ইটারেটর এর মধ্যে পার্থক্য
- ইটারেবল: একটি অবজেক্ট যা
Symbol.iteratorমেথড পায় এবং যার উপাদানগুলো পুনরাবৃত্তি করা যায়। - ইটারেটর: এটি একটি অবজেক্ট যা
next()মেথড প্রদান করে, যা প্রতিটি পরবর্তী মান বা উপাদান রিটার্ন করে।
উদাহরণ
const iterable = ["a", "b", "c"];
const iterator = iterable[Symbol.iterator]();
console.log(iterator.next()); // আউটপুট: { value: "a", done: false }
console.log(iterator.next()); // আউটপুট: { value: "b", done: false }
console.log(iterator.next()); // আউটপুট: { value: "c", done: false }
console.log(iterator.next()); // আউটপুট: { done: true }
এখানে, iterable একটি ইটারেবল অবজেক্ট, এবং iterator হলো তার ইটারেটর যা next() মেথডের মাধ্যমে পরবর্তী উপাদানগুলি রিটার্ন করে।
সারাংশ
জাভাস্ক্রিপ্টে অবজেক্ট সাধারণত ইটারেবল হয় না, তবে Object.entries(), Object.keys(), এবং Object.values() মেথডের মাধ্যমে তাদের ইটারেবল বানানো সম্ভব। এসব মেথড অবজেক্টের কীগুলো, মানগুলো বা কীগুলোর সাথে মানগুলো অ্যারে আকারে রিটার্ন করে, যা পরে for...of লুপের মাধ্যমে পুনরাবৃত্তি করা যায়। এছাড়াও, আপনি নিজেও একটি অবজেক্টে Symbol.iterator মেথড যোগ করে তাকে ইটারেবল তৈরি করতে পারেন। এইভাবে, আপনি ইটারেবল অবজেক্টের মাধ্যমে ডেটাকে আরও দক্ষভাবে পরিচালনা এবং পুনরাবৃত্তি করতে পারেন।
Read more